package com.example.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.common.JwtTokenUtils;
import com.example.entity.Admin;
import com.example.entity.Params;
import com.example.exception.CustomException;
import com.example.mapper.AdminMapper;
import com.example.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Collections;
import java.util.List;

@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {
    @Autowired
    AdminMapper adminMapper;


    @Override
    public List<Admin> getUsers() {
        return adminMapper.getUsers();
    }

    @Override
    public List<Admin> findBySearch(Params params) {
        return adminMapper.findBySearch(params);
    }

    @Override
    public void add(Admin admin) {
        //1. 非空判断
        if (StringUtils.isEmpty(admin.getName())){
            throw new CustomException("用户名不能为空");
        }

        // 新增、编辑共用一个接口，因此做个判断
        // 新增的话，前端传入的对象中没有id
        // 编辑的话，前端传入的对象中有id
        if (admin.getId() == null){
            //2. 对用户名做不重复判断
            Admin user = adminMapper.findUserByName(admin.getName());
            if (user != null) {
                // 重复了，提示前端
                throw new CustomException("用户名重复，请勿重复添加");
            }
            // 给他一个初始密码
            if (admin.getPassword() == null) admin.setPassword("88888888");

            this.save(admin);
        }else {
            this.saveOrUpdate(admin);
        }
    }

    @Override
    public Admin login(Admin admin) {
        //1. 非空判断
        if (StringUtils.isEmpty(admin.getName()) || StringUtils.isEmpty(admin.getPassword())){
            throw new CustomException("用户名或密码不能为空");
        }

        //2. 判断用户名和密码是否正确，如果正确返回信息；如果不正确提示
        Admin user = adminMapper.findUserByName(admin.getName());
        if (user == null){ // 用户不存在
            throw new CustomException("该用户不存在");
        }
        if (!admin.getPassword().equals(user.getPassword())){ // 比较密码是否相同
            throw new CustomException("密码错误,请重新登录");
        }

        //3. 生成token一起带到前端去
        String token = JwtTokenUtils.genToken(user.getId().toString(), user.getPassword());
        user.setToken(token);

        return user;

    }

    @Override
    public Admin findById(int id) {
        return this.getById(id);
    }
}
